package rtool

import (
	"runtime"
	"strings"
)

func getFuncName(pc uintptr) string {
	split := strings.Split(runtime.FuncForPC(pc).Name(), ".")
	length := len(split)
	if length <= 0 {
		return ""
	}
	return split[length-1]
}

// FuncName 返回调用者的函数名字，如果该函数为匿名函数或者go协程则返回空字符串
func FuncName() string {
	return FuncNameByLevel(1)
}

// FuncNameByLevel 返回调用者的函数名字，如果该函数为匿名函数或者go协程则返回空字符串
// level 层级，0为当前级（相当于调用 FuncName ），1为上级，2为上上级
func FuncNameByLevel(level uint) string {
	level++
	pc, _, _, _ := runtime.Caller(int(level))
	return getFuncName(pc)
}
